//package srst.ai.gephi;
//
//import java.util.HashMap;
//
//import org.gephi.graph.api.DirectedGraph;
//import org.gephi.graph.api.Edge;
//import org.gephi.graph.api.Node;
//import org.gephi.graph.api.UndirectedGraph;
//import org.gephi.graph.impl.GraphModelImpl;
//
//
///** 
//* @author  作者 : YUHU YUAN
//* @date 创建时间：2017年5月17日 下午3:49:34 
//* @version 1.0  
//*/
//
//public class Main2Modularity {
//	
//	  public void testCyclicWithWeightsGraphModularity() {
//		    GraphModelImpl graphModel = new GraphModelImpl();
//	        UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph();
//	        
//
//	        Node node1 = graphModel.factory().newNode("0");
//	        Node node2 = graphModel.factory().newNode("1");
//	        Node node3 = graphModel.factory().newNode("2");
//	        Node node4 = graphModel.factory().newNode("3");
//	        Node node5 = graphModel.factory().newNode("4");
//	        Node node6 = graphModel.factory().newNode("5");
//	        Node node7 = graphModel.factory().newNode("6");
//	        Node node8 = graphModel.factory().newNode("7");
//
//	        undirectedGraph.addNode(node1);
//	        undirectedGraph.addNode(node2);
//	        undirectedGraph.addNode(node3);
//	        undirectedGraph.addNode(node4);
//	        undirectedGraph.addNode(node5);
//	        undirectedGraph.addNode(node6);
//	        undirectedGraph.addNode(node7);
//	        undirectedGraph.addNode(node8);
//
//	        //Test 3 parallel edges summing weight = 10
//	        //Related issues ==> #1419 Getting null pointer error when trying to calculate modularity; #1526 NullPointerException on Modularity Statistics with gexf with kind / parallel nodes
//	        Edge edge12_1 = graphModel.factory().newEdge(node1, node2, 0, 2.f, false);
////	        Edge edge12_2 = graphModel.factory().newEdge(node1, node2, 2, 5.f, false);
////	        Edge edge12_3 = graphModel.factory().newEdge(node1, node2, 2, 3.f, false);
//	        
//	        Edge edge23 = graphModel.factory().newEdge(node2, node3, false);
//	        Edge edge34 = graphModel.factory().newEdge(node3, node4, 0, 10.f, false);
//	        Edge edge45 = graphModel.factory().newEdge(node4, node5, false);
//	        Edge edge56 = graphModel.factory().newEdge(node5, node6, 0, 10.f, false);
//	        Edge edge67 = graphModel.factory().newEdge(node6, node7, false);
//	        
//	        //Test 2 parallel edges summing weight = 10
//	        Edge edge78_1= graphModel.factory().newEdge(node7, node8, 0, 5.f, false);
////	        Edge edge78_2 = graphModel.factory().newEdge(node7, node8, 0, 5.f, false);
//	        Edge edge81 = graphModel.factory().newEdge(node8, node1, false);
//
//	        undirectedGraph.addEdge(edge12_1);
////	        undirectedGraph.addEdge(edge12_2);
////	        undirectedGraph.addEdge(edge12_3);
//	        undirectedGraph.addEdge(edge23);
//	        undirectedGraph.addEdge(edge34);
//	        undirectedGraph.addEdge(edge45);
//	        undirectedGraph.addEdge(edge56);
//	        undirectedGraph.addEdge(edge67);
//	        undirectedGraph.addEdge(edge78_1);
////	        undirectedGraph.addEdge(edge78_2);
//	        undirectedGraph.addEdge(edge81);
//
////	        UndirectedGraph graph = graphModel.getUndirectedGraph();
//	        Modularity mod = new Modularity();
//
//	        Modularity.CommunityStructure theStructure = mod.new CommunityStructure(undirectedGraph);
//	        int[] comStructure = new int[undirectedGraph.getNodeCount()];
//
//	        HashMap<String, Double> modularityValues = mod.computeModularity(undirectedGraph, theStructure, comStructure,
//	                1., true, true);
//	        
//	        for(String string: modularityValues.keySet()){
//	        	System.out.println(string+" ： "+modularityValues.get(string));
//	        }
//	        
//	        
//	        System.out.println("===============模块划分结果");
//
//	        int class1 = comStructure[0];
//	        int class2 = comStructure[1];
//	        int class3 = comStructure[2];
//	        int class4 = comStructure[3];
//	        int class5 = comStructure[4];
//	        int class6 = comStructure[5];
//	        int class7 = comStructure[6];
//	        int class8 = comStructure[7];
//
//	        System.out.println(class1);
//	        System.out.println(class2);
//	        System.out.println(class3);
//	        System.out.println(class4);
//	        System.out.println(class5);
//	        System.out.println(class6);
//	        System.out.println(class7);
//	        System.out.println(class8);
//	    }
//	  
//	  
//	  public void testdirectedGraphModularity() {
//		  GraphModelImpl graphModel = new GraphModelImpl();
//		  DirectedGraph undirectedGraph = graphModel.getDirectedGraph();
//		  
//		  
//		  Node node1 = graphModel.factory().newNode("0");
//		  Node node2 = graphModel.factory().newNode("1");
//		  Node node3 = graphModel.factory().newNode("2");
//		  Node node4 = graphModel.factory().newNode("3");
//		  Node node5 = graphModel.factory().newNode("4");
//		  Node node6 = graphModel.factory().newNode("5");
//		  Node node7 = graphModel.factory().newNode("6");
//		  Node node8 = graphModel.factory().newNode("7");
//		  
//		  undirectedGraph.addNode(node1);
//		  undirectedGraph.addNode(node2);
//		  undirectedGraph.addNode(node3);
//		  undirectedGraph.addNode(node4);
//		  undirectedGraph.addNode(node5);
//		  undirectedGraph.addNode(node6);
//		  undirectedGraph.addNode(node7);
//		  undirectedGraph.addNode(node8);
//		  
//		  //Test 3 parallel edges summing weight = 10
//		  //Related issues ==> #1419 Getting null pointer error when trying to calculate modularity; #1526 NullPointerException on Modularity Statistics with gexf with kind / parallel nodes
//		  Edge edge12_1 = graphModel.factory().newEdge(node1, node2, 1, 2.f, false);
////	        Edge edge12_2 = graphModel.factory().newEdge(node1, node2, 2, 5.f, false);
////	        Edge edge12_3 = graphModel.factory().newEdge(node1, node2, 2, 3.f, false);
//		  
//		  Edge edge23 = graphModel.factory().newEdge(node2, node3, 1, 10.f,  false);
//		  Edge edge34 = graphModel.factory().newEdge(node3, node4, 1, 10.f, false);
//		  Edge edge45 = graphModel.factory().newEdge(node4, node5, 1, 10.f,  false);
//		  Edge edge56 = graphModel.factory().newEdge(node5, node6, 1, 10.f, false);
//		  Edge edge67 = graphModel.factory().newEdge(node6, node7,  1, 10.f, false);
//		  
//		  //Test 2 parallel edges summing weight = 10
//		  Edge edge78_1= graphModel.factory().newEdge(node7, node8, 1, 5.f, false);
////	        Edge edge78_2 = graphModel.factory().newEdge(node7, node8, 0, 5.f, false);
//		  Edge edge81 = graphModel.factory().newEdge(node8, node1, 1, 10.f,  false);
//		  
//		  undirectedGraph.addEdge(edge12_1);
////	        undirectedGraph.addEdge(edge12_2);
////	        undirectedGraph.addEdge(edge12_3);
//		  undirectedGraph.addEdge(edge23);
//		  undirectedGraph.addEdge(edge34);
//		  undirectedGraph.addEdge(edge45);
//		  undirectedGraph.addEdge(edge56);
//		  undirectedGraph.addEdge(edge67);
//		  undirectedGraph.addEdge(edge78_1);
////	        undirectedGraph.addEdge(edge78_2);
//		  undirectedGraph.addEdge(edge81);
//		  
////	        UndirectedGraph graph = graphModel.getUndirectedGraph();
//		  Modularity mod = new Modularity();
//		  
//		  Modularity.CommunityStructure theStructure = mod.new CommunityStructure(undirectedGraph);
//		  int[] comStructure = new int[undirectedGraph.getNodeCount()];
//		  
//		  HashMap<String, Double> modularityValues = mod.computeModularity(undirectedGraph, theStructure, comStructure,
//				  1., true, true);
//		  
//		  for(String string: modularityValues.keySet()){
//			  System.out.println(string+" ： "+modularityValues.get(string));
//		  }
//		  
//		  
//		  System.out.println("===============模块划分结果");
//		  
//		  int class1 = comStructure[0];
//		  int class2 = comStructure[1];
//		  int class4 = comStructure[3];
//		  int class5 = comStructure[4];
//		  int class7 = comStructure[6];
//		  int class8 = comStructure[7];
//		  
//		  if(class1 == class2){
//			  System.out.println("yes");
//		  }
//		  if(class7 == class8){
//			  System.out.println("yes");
//		  }
//		  
//		  if(class4 != class5 ){
//			  System.out.println("yes");
//		  }
//	  }
//	
//	
//	
//	
//
//	public static void main(String[] args) {
//		// TODO Auto-generated method stub
//		
//		new Main2Modularity().testCyclicWithWeightsGraphModularity();
//
//	}
//
//}
//
//
//
//
//
//
//
//
//
//
//
//
//
